﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using BasicForms;
using Lists;
using System.Data.SqlClient;
using GeneralLibs;

namespace ReportGenerators.Khac.ThongKeHangMoiTheoKhachHang
{
    public partial class FrmThongKeHangMoiTheoKhachHang : BasicForms.FrmSupportPrintableComponents
    {
        public FrmThongKeHangMoiTheoKhachHang()
        {
            InitializeComponent();
        }

        private void FrmThongKeHangMoiTheoKhachHang_Load(object sender, EventArgs e)
        {
            if (DesignMode) return;
            try
            {
                txtGioiHanSoLuongTon.EditValue = "";
                cmbKyBaoCao.SelectedIndex = 19;

                cmbKhachHang.DataSource = DanhMucDoiTuongNghiepVu.GetDanhMucKhachHang().DataView;
                cmbKhachHang.DisplayColumn = "Ten";
                cmbKhachHang.ValueColumn = "ID";
                cmbKhachHang.AddVisibleColumn("Ma", "Mã");
                cmbKhachHang.AddVisibleColumn("Ten", "Tên");

                cmbKho.DataSource = DanhMucKho.Instance.DataView;
                cmbKho.DisplayColumn = "Ten";
                cmbKho.ValueColumn = "ID";
                cmbKho.AddVisibleColumn("Ma", "Mã");
                cmbKho.AddVisibleColumn("Ten", "Tên");

                dsThongKeHangMoiTheoKhachHang.VatTuHangHoa.Merge(DanhMucVatTuHangHoa.GetDanhMucHangHoaDangSuDung().DataView.ToTable());
            }
            catch(Exception ex)
            {
            }
            foreach (DevExpress.XtraGrid.Columns.GridColumn column in gridView.Columns)
            {
                column.OptionsFilter.AutoFilterCondition = DevExpress.XtraGrid.Columns.AutoFilterCondition.Contains;
            }
            colSoLuongTon.Visible = false;
            FormatTextEdit(txtGioiHanSoLuongTon, TextFormatType.Integer);
          
        }

        private void cmbKyBaoCao_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                FrmThamSoBaoCao.ThietLapKhoangThoiGianBaoCao(cmbKyBaoCao.Text, cmbKyBaoCao, dtNgayBatDau, dtNgayKetThuc);
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
        }

        private void cmbKhachHang_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete) cmbKhachHang.EditValue = Guid.Empty;
        }

        private void btnLoad_Click(object sender, EventArgs e)
        {
            if (cmbKhachHang.Text != "")
            {
                Guid maKhachHang = Guid.Empty;
                Guid khoID = Guid.Empty;
                DateTime ngayBatDau = dtNgayBatDau.DateTime;
                DateTime ngayKetThuc = dtNgayKetThuc.DateTime;
                int gioiHanSoLuong = -1;
                try
                {
                    gioiHanSoLuong = Convert.ToInt32(txtGioiHanSoLuongTon.Text.ToString());
                }
                catch (Exception ex)
                {
                }
                if (cmbKho.EditValue is Guid && (Guid)cmbKho.EditValue != Guid.Empty) khoID = (Guid)cmbKho.EditValue;
                if (cmbKhachHang.EditValue is Guid && (Guid)cmbKhachHang.EditValue!=Guid.Empty)maKhachHang=(Guid)cmbKhachHang.EditValue;
                else if (gioiHanSoLuong != -1 && gioiHanSoLuong != 0) MessageBox.Show("Nếu không chọn Kho thì không được chọn Giới hạn số lượng tồn)");

                string kyBaoCao = cmbKyBaoCao.Text;
                if (kyBaoCao == "Cả năm") kyBaoCao = "Năm " + GeneralLibs.Config.NamTaiChinh.ToString();
                else if (kyBaoCao == "Tùy chọn") kyBaoCao = string.Format("Từ ngày {0}/{1}/{2} đến ngày {3}/{4}/{5}",
                                           ngayBatDau.Day, ngayBatDau.Month, ngayBatDau.Year,
                                           ngayKetThuc.Day, ngayKetThuc.Month, ngayKetThuc.Year);

                BasicForms.FrmProgressBar.StartShowProgress();
                SqlConnection con = new SqlConnection(GeneralLibs.LocalSettings.ConnectString);
                try
                {
                    SqlCommand cmd = con.CreateCommand();
                    con.Open();
                    
                    cmd.CommandText = string.Format("SELECT  DISTINCT D.ID, D.Ma MaHangHoa, D.Ten TenHangHoa, E.Ten TenNhomHangHoa, D.DonViTinh DonViTinh, D.GiaBia, D.ChietKhauBan, D.TacGia, D.NhaXuatBan \n" +
                                                    "FROM LoaiChungTu LCT INNER JOIN ChungTu A ON LCT.ID = A.LoaiChungTuID \n" +
                                                    "       INNER JOIN ChungTu B ON A.ChungTuID = B.ChungTuGocID \n" +
                                                    "       INNER JOIN  KhoanMucChungTu C ON B.ChungTuID = C.ChungTuID \n" +
                                                    "       INNER JOIN VatTuHangHoa D ON C.VatTuHangHoa1ID = D.ID \n" +
                                                    "       INNER JOIN NhomVatTuHangHoa E ON D.NhomVatTuHangHoaID = E.ID \n" +
                                                    "WHERE @ThoiDiemDau <= A.Ngay AND A.Ngay <= @ThoiDiemCuoi  \n" +
                                                    "       AND D.ID NOT IN  \n" +
                                                    "           ( \n" +
                                                    "           SELECT  DISTINCT D.ID  \n" +
                                                    "           FROM LoaiChungTu LCT INNER JOIN ChungTu A ON LCT.ID = A.LoaiChungTuID \n" +
                                                    "               INNER JOIN  KhoanMucChungTu C ON A.ChungTuID = C.ChungTuID \n" +
                                                    "               INNER JOIN VatTuHangHoa D ON C.VatTuHangHoa1ID = D.ID \n" +
                                                    "           WHERE LCT.Ma = 'PhieuXuatKho'  \n" +
                                                    "                   AND A.DoiTuongNghiepVu1ID = @MaKhachHang \n" +
                                                    "           )                                         \n " +
                                                    "ORDER BY D.Ten \n ");

                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("@MaKhachHang", maKhachHang);
                    cmd.Parameters.AddWithValue("@ThoiDiemDau", ngayBatDau);
                    cmd.Parameters.AddWithValue("@ThoiDiemCuoi", ngayKetThuc);

                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    dsThongKeHangMoiTheoKhachHang.Detail_ThongKeHangMoiTheoKhachHang.Clear();
                    da.Fill(dsThongKeHangMoiTheoKhachHang.Detail_ThongKeHangMoiTheoKhachHang);

                    //day het hang moi vao dataset roi moi loc theo so luong ton

                    int count = 0;
                    int total = dsThongKeHangMoiTheoKhachHang.Detail_ThongKeHangMoiTheoKhachHang.Rows.Count;

                    if (khoID != Guid.Empty)
                    {
                        colSoLuongTon.Visible = true;
                        foreach (DataRow row in dsThongKeHangMoiTheoKhachHang.Detail_ThongKeHangMoiTheoKhachHang.Rows)
                        {
                            BasicForms.FrmProgressBar.Status = string.Format("Đang xử lý {0}/{1}", count, total);
                            count++;
                            Guid vatTuHangHoaID = (Guid)row["ID"];
                            VatTuHangHoa vatTuHangHoa = DanhMucVatTuHangHoa.Instance.GetByID(vatTuHangHoaID);

                            TonKho tonKho = TonKho.CalculateTonTuThoiDiemKhoaSoGanNhatDenThoiDiemNhapVaoTheoKho(cmd, ngayKetThuc, khoID, vatTuHangHoaID);
                            row["SoLuongTon"] = (decimal)tonKho.SoLuong;
                            if (tonKho.SoLuong < gioiHanSoLuong && gioiHanSoLuong > -1)
                            {
                                row.Delete();
                            }
                        }

                    }
                    else colSoLuongTon.Visible = false;

                    gridControl.DataSource = dsThongKeHangMoiTheoKhachHang.Detail_ThongKeHangMoiTheoKhachHang;
                    FormatNumberInGridView(gridView);
                }
                catch (Exception ex)
                {
                    BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
                }
                finally
                {
                    con.Close();
                    con = null;
                }
                BasicForms.FrmProgressBar.FinishShowProgress();
            }
            else
            {
                MessageBox.Show("Nhập thông tin Khách Hàng !");
            }
        }

        private void btnPreview_Click(object sender, EventArgs e)
        {
            PrintThongKeHangMoiTheoKhachHang();
        }
        public bool PrintThongKeHangMoiTheoKhachHang()
        {
            if (dsThongKeHangMoiTheoKhachHang.Detail_ThongKeHangMoiTheoKhachHang.Rows.Count != 0)
            {
                SqlConnection con = new SqlConnection(GeneralLibs.LocalSettings.ConnectString);
                try
                {
                    DateTime ngayBatDau = dtNgayBatDau.DateTime;
                    DateTime ngayKetThuc = dtNgayKetThuc.DateTime;
                    SqlCommand cmd = con.CreateCommand();
                    SqlDataAdapter da = null;

                    cmd.CommandText = "Select_ThongTinDoanhNghiep2";
                    cmd.Parameters.Clear();
                    cmd.CommandType = CommandType.StoredProcedure;
                    da = new SqlDataAdapter(cmd);
                    dsThongKeHangMoiTheoKhachHang.ThongTinDoanhNghiep.Clear();
                    da.Fill(dsThongKeHangMoiTheoKhachHang.ThongTinDoanhNghiep);

                    DataRow row = dsThongKeHangMoiTheoKhachHang.ThongSoKhac.NewRow();
                    row["UserCreate"] = CustomSecurity.User.CurUser.FullName;
                    row["NgayCreate"] = System.DateTime.Now;
                    row["TuNgay"] = ngayBatDau;
                    row["DenNgay"] = ngayKetThuc;
                    dsThongKeHangMoiTheoKhachHang.ThongSoKhac.Rows.Add(row);

                    string findDoiTuong = string.Format("SELECT Ten TenKhachHang, DiaChi DiaChiKhachHang FROM DoiTuongNghiepVu WHERE ID = '{0}'", cmbKhachHang.EditValue);
                    cmd.CommandText = findDoiTuong;
                    cmd.CommandType = CommandType.Text;
                    da = new SqlDataAdapter(cmd);
                    dsThongKeHangMoiTheoKhachHang.KhachHang.Clear();
                    da.Fill(dsThongKeHangMoiTheoKhachHang, "KhachHang");

                    RptPrintBaoGiaHangMoiTheoKhachHang report = new RptPrintBaoGiaHangMoiTheoKhachHang();
                    report.SetDataSource(dsThongKeHangMoiTheoKhachHang);
                    ReportTemplates.FrmPrintReport frm = new ReportTemplates.FrmPrintReport(report, "In thống kê hàng mới");
                    frm.Show();
                    return true;
                }
                catch (Exception ex)
                {
                    BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
                    return false;
                }
                finally
                {
                    con.Close();
                    con = null;
                }
            }
            else
            {
                MessageBox.Show("Không có hàng mới hiển thị.\nBạn cần Load danh mục hàng mới lên trước khi in phiếu.");
                return false;
            }
        }
    }
}
